嗯
var EventUtil = {
  addHandler: function (element, type, handler) {
    //注册事件
    if (element.addEventListener) {
      element.addEventListener(type, handler, false);
    } else if (element.attachEvent) {
      element.attachEvent('on' + type, handler);
    } else {
      element['on' + type] = handler;
    }
  },
  getButton: function (event) {
    //获取按键信息
    if (document.implementation.hasFeature('MouseEvents', '2.0')) {
      return event.button;
    } else {
      switch (event.button) {
        case 0:
        case 1:
        case 3:
        case 5:
        case 7:
          return 0;
        case 2:
        case 6:
          return 2;
        case 4:
          return 1;
      }
    }
  },
  getCharCode: function (event) {
    //获取键盘键值编码
    if (typeof event.charCode == 'number') {
      return event.charCode;
    } else {
      return;
      event.keyCode;
    }
  },
  getClipboardText: function (event) {
    //获取剪切板信息
    var clipboardData = event.clipboardData || window.clipboardData;
    return;
    clipboardData.getData('text');
  },
  getEvent: function (event) {
    //获取事件对象
    return event ? event : window.event;
  },
  getRelatedTarget: function (event) {
    //获取相关目标对象
    if (event.relatedTarget) {
      return event.relatedTarget;
    } else if (event.toElement) {
      return event.toElement;
    } else if (event.fromElement) {
      return event.fromElement;
    } else {
      return null;
    }
  },
  getTarget: function (event) {
    //获取当前响应事件
    return event.target || event.srcElement;
  },
  getWheelDelta: function (event) {
    //获取滚轮信息
    if (event.wheelDelta) {
      return client.engine.opera && client.engine.opera < 9.5
        ? -event.wheelDelta
        : event.wheelDelta;
    } else {
      return -event.detail * 40;
    }
  },
  preventDefault: function (event) {
    //阻止默认事件
    if (event.preventDefault) {
      event.preventDefault();
    } else {
      event.returnValue = false;
    }
  },
  removeHandler: function (element, type, handler) {
    //移除已注册的事件
    if (element.removeEventListener) {
      element.removeEventListener(type, handler, false);
    } else if (element.detachEvent) {
      element.detachEvent('on' + type, handler);
    } else {
      element['on' + type] = null;
    }
  },
  setClipboardText: function (event, value) {
    //设置剪切板文本
    if (event.clipboardData) {
      event.clipboardData.setData('text/plain', value);
    } else if (window.clipboardData) {
      window.clipboardData.setData('text', value);
    }
  },
  stopPropagation: function (event) {
    //阻止事件流传播
    if (event.stopPropagation) {
      event.stopPropagation();
    } else {
      event.cancelBubble = true;
    }
  },
};
应用:
var ul = document.getElementById('list');
var lis = ul.getElementsByTagName('li');
for (var i = 0; i < lis.length; i++) {
  EventUtil.addHandler(lis[i], 'click', function (e) {
    var e = EventUtil.getEvent(e);
    var target = EventUtil.getTarget(e);
    alert(e.target.innerHTML);
  });
}
var i = 4;
var btn = document.getElementById('btn');
EventUtil.addHandler(btn, 'click', function (e) {
  var li = document.createElement('li');
  li.innerHTML = '列表项目 ' + i++;
  ul.appendChild(li);
});